package com.all.play.mymvptwo.presenter;

import com.all.play.mymvptwo.bean.InfoBean;
import com.all.play.mymvptwo.model.IModel;
import com.all.play.mymvptwo.model.IModelImpl;
import com.all.play.mymvptwo.view.IView;

import java.util.List;

/**
 * Created by 聪明一只哈 on 2018/5/16.
 * Time: 2018/5/16  11:06
 */
//                          这里使用泛型,来便于view层获取到该view对应的P层对象
public class DataPersenter<T extends IView> extends BasePresenter<T>{

    //获取view和model的引用
   // IView iview;

    //与view层对应的moudel层对象
    IModel iModel=new IModelImpl();

//    public DataPersenter(T iview) {
//        //this.iview = iview;
//       // mView=new WeakReference<T>(iview);
//    }

    /**
     * 弱引用不是最好的优化方式
     * 以下才是
     * 绑定--->v与p之间的绑定,手动绑定
     */

//    //手动进行绑定  抽取到父类中,便于子类继承,便于创建不同类型的P层
//    public void attachView(T view){
//        mView=new WeakReference<T>(view);
//    }
//
//    //手动进行解绑
//    public void detachView(){
//        mView.clear();
//    }



    //执行操作,这个操作是view层获取数据的操作
    public void fetch(){
        if(mView.get()!=null){
            mView.get().showProgress();
            if(iModel!=null){
                //这里使用到了model层对应的对象,通过内部接口的回调方式,将数据传给View层对象
                iModel.loadDatas(new IModel.InfoOnLoadListener() {
                    @Override
                    public void onComplete(List<InfoBean.DataBean> dataBeen) {
                        if(dataBeen!=null){
                            mView.get().showData(dataBeen);
                            mView.get().hidePeogress();
                        }
                    }

                    @Override
                    public void inprogress(long total, float progress) {

                        mView.get().showDetialProgress(total, progress);


                    }


                });
            }

        }

    }
}
